package nsu.edu.zsq.dao;

import java.util.List;

import org.apache.ibatis.annotations.Param;

import nsu.edu.zsq.bean.TchCourse;
import nsu.edu.zsq.bean.TchCourseExample;
import nsu.edu.zsq.param.TchCourseParam;

public interface TchCourseMapper {
    /**
     *
     */
    long countByExample(TchCourseExample example);

    /**
     *
     */
    int deleteByExample(TchCourseExample example);

    /**
     *
     */
    int deleteByPrimaryKey(Integer id);

    /**
     *
     */
    int insert(TchCourse record);

    /**
     *
     */
    int insertSelective(TchCourse record);

    /**
     *
     */
    List<TchCourse> selectByExample(TchCourseExample example);

    /**
     *
     */
    TchCourse selectByPrimaryKey(Integer id);

    /**
     *
     */
    int updateByExampleSelective(@Param("record") TchCourse record, @Param("example") TchCourseExample example);

    /**
     *
     */
    int updateByExample(@Param("record") TchCourse record, @Param("example") TchCourseExample example);

    /**
     *
     */
    int updateByPrimaryKeySelective(TchCourse record);

    /**
     *
     */
    int updateByPrimaryKey(TchCourse record);
    
    /**
    * 根据教师编号，获取教师课程列表（自定义TchCourseParam实体类，含有专业名称）
    * @param teacherNo 教师编号
    * @return List<TchCourseParam>
    */
    List<TchCourseParam> listTchCourseParamByTeacherNo(@Param("teacherNo") String teacherNo);
    
    /**
    * 根据专业代码，获取该专业下所有教师课程（只查询必修课，去重一个教师多个相同的课程）
    * @param majorNo 专业代码
    * @return List<TchCourseParam>
    */
    List<TchCourseParam> listTchCourseParamByMajorNo(@Param("majorNo") String majorNo);

    /**
     * 获取带有上课时间、班级的教师课程列表数据（合并两个表的结果）
     * @param teacherNo 教师编号
     */
    List<TchCourseParam> listTchCourseWithCourseTime(@Param("teacherNo") String teacherNo);
    
    /**
     * 获取教师授课的主修课程
     * @param teacherNo 教师编号
     * @return List<TchCourseParam>
     */
    List<TchCourseParam> listMajorTchCourse(String teacherNo);

    /**
     * 获取教师授课的选修课程
     * @param teacherNo 教师编号
     * @return List<TchCourseParam>
     */
    List<TchCourseParam> listMinorTchCourse(String teacherNo);

    /**
     * 获取专业的专业选修课+公共选修（用于学生选课操作）
     * @param majorNo 专业代码
     * @return List<TchCourseParam>
     */
    List<TchCourseParam> listTchCourse(String majorNo);
}